A communication channel between computers sending and receiving data may be a bottleneck for data transfer. One mechanism for transferring a data file from one computer to another uses multiple concurrent threads that simultaneously process different blocks of data from the file in parallel. The processed data blocks may then be sent via the communication channel.
Parallel processing, however, may cause problems, such as due to data blocks of a file being received out of order. Receiving computing devices may write the received data blocks to a storage medium in the order of receipt, which may result in the data blocks of the file being fragmented (e.g., not located sequentially) on the storage medium. To read the fragmented file, a read head may have to move from location to location on the storage medium. For example, during a seek operation, the read head may be searching for a start of the next block on the storage medium, while not reading the block data during the move. Movement of the read head from location to location on the storage medium adds to the amount of time required retrieve the file.
A further drawback of conventional systems relates to an end of file marker of the file. The end of file marker may indicate that a particular data block is a last piece of data for a file. Due to data blocks being sent concurrently, the receiving computer may receive the data block containing the end of file marker before all other data blocks of a file have been received. The receiving computer may write the data block containing the end of file marker to the storage medium, and thereafter may receive data blocks of the file that are to be written to the storage medium after receipt of the end of file marker. Writing after an end of file marker may be very complex and may have to be handled separately for different platforms, such as, for example, MAC™, WINDOWS™, and LINUX™. Improved methods and systems are needed.